<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>
    // 1.定义
    // 字面量写法
    let arr = [1, "2", true, {name: "张三", age: 20}];
    /*
        构造函数创建，一和多个值
            一个值：表示是长度
            多个值：实际元素个数就是长度
     */
    let arr1 = new Array(10);
    console.log(arr1);
    let arr2 = new Array(10, 11, 12, 13);
    console.log(arr2);
    // 普通函数创建
    arr1 = Array(10);
    console.log(arr1);
    arr2 = Array(10, 11, 12, 13);
    console.log(arr2);

    // 匿名对象，一次性使用
    new Array(10)
    new Array(10)

    // ES6：提供一个新的写法，
    let arr3 = Array.of(10); // 创建一个长度为1的数组

    // 数组长度，是属性不是方法，元素的个数，可以修改
    console.log(arr3.length); // 1
    arr3.length = 10;
    console.log(arr3);

    // 元素指的是数组中每个位置上的值
    // 元素的位置称为索引
    // 索引的范围，在JavaScript中，>=0
    // 第一个元素的索引是0，最后元素一个元素的索引是length - 1
    // 字符串也可以作为索引效果与负数一致，不会改变length的值。不能使用计数for循环遍历出来，
    // 但可以使用for-in循环遍历

    function t1(...a) {
        console.log(a);
    }
    t1(1, 2, 3);

    // 数组的使用、获取指定位置上的值、修改指定位置上的值
    arr3[1] = 20;
    arr3[0] = 30;
    console.log(arr3);
    // 在数组最后添加元素，即修改长度
    arr3[arr3.length] = 40;
    console.log(arr3);
    arr3[-1] = 10;
    arr3["a10"] = "abc";
    console.log(arr3);
    // 数组的遍历
    // 不能打印非数字索引上的值
    for (let i = 0; i < arr3.length; i++) {
        console.log(arr3[i]);
    }
    // for-in，item指定是索引，且该索引上的元素不为空
    for (let item in arr3) {
        console.log(item, arr3[item]);
    }

    // 扩展操作符，可以把数组中的每个元素的值列举出来
    console.log(...arr3);
    let arr4 = [1, 3, 5, 7];
    console.log(Math.min(...arr4));
    Math.max(1, 3, 5)
</script>
</body>
</html>